package xyz.riceball.usercore.service;

import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import xyz.riceball.framework.core.bean.ApiR;
import xyz.riceball.framework.core.bean.ApiRc;
import xyz.riceball.usercore.entity.po.MenuPO;

import java.util.List;

/**
 * 菜单表(Menu)表服务接口
 *
 * @author xiaovcloud
 * @since 2022-04-24 20:17:47
 */
public interface MenuService extends IService<MenuPO> {
    /**
     * 树形查询出所有菜单
     *
     * @return
     */
    List<Tree<String>> treeMenu(MenuPO menuPO);

    /**
     * 树形查询出当前角色所拥有的菜单
     *
     * @return
     */
    List<Tree<String>> treeMenuCurrent();

    /**
     * 模糊查询name
     *
     * @param menuName
     * @return
     */
    List<MenuPO> selectMenuLikeName(String menuName);

    /**
     * 新增菜单
     *
     * @param menuPO
     * @return
     */
    ApiR<MenuPO> add(MenuPO menuPO);

    /**
     * 修改菜单
     *
     * @param menuPO
     * @return
     */
    boolean edit(MenuPO menuPO);

    /**
     * 删除
     *
     * @param ids
     * @return
     */
    ApiRc<Void> delete(List<String> ids);

    /**
     * 分页查询
     *
     * @param page
     * @param menuPO
     * @return
     */
    Page<MenuPO> selectPage(Page<MenuPO> page, MenuPO menuPO);

    /**
     * 查询被选中的子集菜单
     *
     * @return
     */
    List<String> validChildMenuId();

    /**
     * 修改菜单的有效性
     *
     * @param ids
     * @return
     */
    boolean changeValidMenu(List<String> ids);
}

